import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
                            QHBoxLayout, QPushButton, QTextEdit, QLabel, QLineEdit)

class NestedLayoutDemo(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置窗口标题
        self.setWindowTitle('嵌套布局示例')
        # 设置窗口初始大小
        self.resize(800, 600)

        # 中央部件，承载所有布局和控件
        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        # 整体水平布局，分为左侧导航栏和右侧主内容区
        main_layout = QHBoxLayout(central_widget)

        # 左侧导航栏布局（垂直）
        left_layout = QVBoxLayout()
        left_layout.addWidget(QLabel("我的应用程序"))
        # 导航按钮
        home_btn = QPushButton("首页")
        setting_btn = QPushButton("设置")
        help_btn = QPushButton("帮助")
        left_layout.addWidget(home_btn)
        left_layout.addWidget(setting_btn)
        left_layout.addWidget(help_btn)
        # 左侧布局添加拉伸，使按钮靠上
        left_layout.addStretch()
        main_layout.addLayout(left_layout)

        # 右侧主内容区布局（垂直）
        right_layout = QVBoxLayout()

        # 右侧顶部搜索栏布局（水平）
        search_layout = QHBoxLayout()
        search_input = QLineEdit()
        search_input.setPlaceholderText("搜索...")
        search_btn = QPushButton("搜索")
        search_layout.addWidget(search_input)
        search_layout.addWidget(search_btn)
        # 搜索栏布局添加拉伸，使搜索框和按钮靠右
        search_layout.addStretch()
        right_layout.addLayout(search_layout)

        # 右侧中间文本显示区
        text_label = QLabel("欢迎使用应用程序")
        text_edit = QTextEdit()
        text_edit.setPlaceholderText("在这里输入内容...")
        right_layout.addWidget(text_label)
        right_layout.addWidget(text_edit)

        # 右侧底部操作按钮布局（水平）
        btn_layout = QHBoxLayout()
        # 按钮添加拉伸，使按钮靠右
        btn_layout.addStretch()
        save_btn = QPushButton("保存")
        cancel_btn = QPushButton("取消")
        btn_layout.addWidget(save_btn)
        btn_layout.addWidget(cancel_btn)
        right_layout.addLayout(btn_layout)

        main_layout.addLayout(right_layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = NestedLayoutDemo()
    window.show()
    sys.exit(app.exec_())